/*
	Pulsar engine. Core.
	Main include file.

	Copyright (C) 2013-2014 Dmitry Dolgov

	This program is free software; you can redistribute it and/or modify it under the terms of the
	GNU General Public License as published by the Free Software Foundation; either version 2 of
	the License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
	without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
	See the GNU General Public License for more details.
*/

#ifndef _PULSAR_H_
#define _PULSAR_H_

//
// Define PL_x constants automatically (if possible)
//
#include <pulsar/inc/pulsar_defauto.h>

//
// Base preprocessor checks
//
#include <pulsar/inc/pulsar_defcheck.h>

//
// Additional includes
//
#include <ctype.h>
#include <malloc.h>
#include <new>
#include <memory>
#include <float.h>
#include <math.h>
#include <time.h>

/// Base library log name
#define PL_LOG_NAME PL_T("PL")

//
// Base compiler and OS-setup
//
#include <pulsar/inc/pulsar_defsetup.h>

// Memory manager
#include <pulsar/inc/pulsar_memorydbg.h>
#include <pulsar/inc/pulsar_memorymng.h>
#include <pulsar/inc/pulsar_memoryframe.h>

// Debug functions, asserts
#include <pulsar/inc/pulsar_debugfunc.h>

// Date and time operations (include OS-spec)
#include <pulsar/inc/pulsar_datetime.h>

// AppBase class
#include <pulsar/inc/pulsar_appbase.h>

// Standard algorithms and functions
#include <pulsar/inc/pulsar_algorithm.h>
#include <pulsar/inc/pulsar_function.h>

// Own arrays
#include <pulsar/inc/pulsar_arrayfunc.h>

// Command line management
#include <pulsar/inc/pulsar_cmdline.h>

// Semaphores, critical sections, etc
#include <pulsar/inc/pulsar_synchronize.h>

// thread-safe queue
#include <pulsar/inc/pulsar_queue.h>

// Own lists
#include <pulsar/inc/pulsar_list.h>

// Base events
#include <pulsar/inc/pulsar_events.h>


// Logging
#include <pulsar/inc/pulsar_log.h>
#include <pulsar/inc/pulsar_log_std.h>

// String operations and code pages
#include <pulsar/inc/pulsar_string_std.h>
#include <pulsar/inc/pulsar_string.h>
#include <pulsar/inc/pulsar_string_util.h>
#include <pulsar/inc/pulsar_string_cat.h>
#include <pulsar/inc/pulsar_string_convert.h>
#include <pulsar/inc/pulsar_string_format.h>
#include <pulsar/inc/pulsar_string_filename.h>

// Multi-threads and jobs
#include <pulsar/inc/pulsar_thread.h>

// Advanced operations - command line parser
#include <pulsar/inc/pulsar_cmdline_parser.h>

// Memory monitor events
#include <pulsar/inc/pulsar_memorymonitor.h>

/*
// #include <pulsar/inc/pulsar_stdevents.h>
*/

// File system
#include <pulsar/inc/pulsar_file_decl.h>
#include <pulsar/inc/pulsar_file_stream.h>
#include <pulsar/inc/pulsar_file_manager.h>
#include <pulsar/inc/pulsar_file_stream_mem.h>

// Own containers
#include <pulsar/inc/pulsar_vector.h>
/*
#include <pulsar/inc/pulsar_hash.h>
*/

// Platform-specific components and classes
#if defined(PL_WINDOWS) || defined(PL_WINDOWS64)
#include <pulsar/inc/win/pulsar_app_win.h>
#include <pulsar/inc/win/pulsar_events_win.h>
#include <pulsar/inc/win/pulsar_log_win.h>
#include <pulsar/inc/win/pulsar_dlgtemplate_win.h>
//#include <pulsar/inc/win/pulsar_stdcontrols_win.h>
#elif defined(PL_LINUX) || defined(PL_LINUX64)
#include <pulsar/inc/linux/pulsar_app_linux.h>
#else
#error "Wrong Operation System"
#endif

#endif // _PULSAR_H_

//
// End of file 'pulsar.h'
//
